home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Languages / MacGofer 0.22d / MacGofer Sources / parser.y < prev    next >
Text File  |  1993-08-25  |  29KB  |  48 lines

  1. /* --------------------------------------------------------------------------
  2.  * parser.y:    Copyright (c) Mark P Jones 1991-1993.   All rights reserved.
  3.  *              See goferite.h for details and conditions of use etc...
  4.  *              Gofer version 2.28 January 1993
  5.  *
  6.  *              You should expect 14 shift/reduce conflicts when passing
  7.  *              this grammar through yacc.  Don't worry, they will all be
  8.  *              resolved correctly as shifts.
  9.  *
  10.  *        There will also be 5 reduce/reduce conflicts.  These are
  11.  *        more worrying although they will still be resolved correctly
  12.  *        as long as you keep the two grammar rules concerned (see the
  13.  *        y.output file for details) in the same order as used here.
  14.  *
  15.  * Gofer parser (included as part of input.c)
  16.  * ------------------------------------------------------------------------*/
  17.  
  18. %{
  19. #ifndef lint
  20. #define lint
  21. #endif
  22. #define defTycon(n,l,lhs,rhs,w)     tyconDefn(intOf(l),lhs,rhs,w); sp-=n
  23. #define sigdecl(l,vs,t)         ap(SIGDECL,triple(l,vs,t))
  24. #define grded(gs)         ap(GUARDED,gs)
  25. #define letrec(bs,e)         (nonNull(bs) ? ap(LETREC,pair(bs,e)) : e)
  26. #define yyerror(s)         /* errors handled elsewhere */
  27. #define YYSTYPE             Cell
  28.  
  29. static Cell   local gcShadow     Args((Int,Cell));
  30. static Void   local syntaxError  Args((String));
  31. static String local unexpected   Args((Void));
  32. static Cell   local checkPrec    Args((Cell));
  33. static Void   local fixDefn      Args((Syntax,Cell,Cell,List));
  34. static Void   local setSyntax    Args((Int,Syntax,Cell));
  35. #if MAC
  36.        Cell   local buildTuple   Args((List));
  37. #else
  38. static Cell   local buildTuple   Args((List));
  39. #endif
  40. static Cell   local checkClass   Args((Cell));
  41. static List   local checkContext Args((List));
  42. static Cell   local tidyInfix    Args((Cell));
  43.  
  44. /* For the purposes of reasonably portable garbage collection, it is
  45.  * necessary to simulate the YACC stack on the Gofer stack to keep
  46.  * track of all intermediate constructs.  The lexical analyser
  47.  * pushes a token onto the stack for each token that is found, with
  48.  * these element